{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a3b44703",
   "metadata": {},
   "source": [
    "# Titanic Data Processing with SparkXshards on Orca"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "416b0a4b",
   "metadata": {},
   "source": [
    "Copyright 2016 The BigDL Authors."
   ]
  },
  {
   "cell_type": "raw",
   "id": "a474a628",
   "metadata": {},
   "source": [
    "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
    "# you may not use this file except in compliance with the License.\n",
    "# You may obtain a copy of the License at\n",
    "#\n",
    "#     http://www.apache.org/licenses/LICENSE-2.0\n",
    "#\n",
    "# Unless required by applicable law or agreed to in writing, software\n",
    "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
    "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
    "# See the License for the specific language governing permissions and\n",
    "# limitations under the License."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bf304c91",
   "metadata": {},
   "source": [
    "SparkXshards in Orca allows users to process large-scale dataset using existing Python codes in a distributed and data-parallel fashion, as shown below. This notebook is an example of data exploration using SparkXshards on Orca. \n",
    "\n",
    "This notebook is adapted from [Titanic Data Processing with Python(0.813)](https://www.kaggle.com/code/chuanguy/titanic-data-processing-with-python-0-813/notebook).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "eb4b0017",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Use seaborn for some plots\n",
    "!pip install seaborn pandas numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ebde4a88",
   "metadata": {},
   "outputs": [],
   "source": [
    "# import necessary libraries\n",
    "from bigdl.orca import init_orca_context, stop_orca_context\n",
    "import bigdl.orca.data.pandas\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "03eff331",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Start an OrcaContext\n",
    "sc = init_orca_context(memory=\"4g\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a46ad6a7",
   "metadata": {},
   "source": [
    "## Load data in parallel and get general information"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "904060e4",
   "metadata": {},
   "source": [
    "Load data into data_shards, it is a SparkXshards that can be operated on in parallel, here each element of the data_shards is a panda dataframe read from a file on the cluster. Users can distribute local code of `pd.read_csv(dataFile)` using `bigdl.orca.data.pandas.read_csv(datapath)`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8702a15b",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_shards = bigdl.orca.data.pandas.read_csv('../titanic.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "6d12d912",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>None</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>None</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>None</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500  None        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250  None        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500  None        S  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# show the first couple of rows in the data_shards\n",
    "data_shards.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "3b8526d9",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "891"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# count total number of rows in the data_shards\n",
    "len(data_shards)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "39ce755d",
   "metadata": {},
   "source": [
    "## Process data in parallel and visualize at local"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13e46b92",
   "metadata": {},
   "source": [
    "`Xshards` provides a handy API of `transform_shard` to take and apply functions on each shard of the data in parallel. Users can define any function to transform a `Xshards` in a distributed fashion to process big dataset. \n",
    "\n",
    "Most of the times, the data is too big to be be brought to a single node for visualization, `SparkXshards` provides `SparkXshards.sample_to_pdf(frac)` to to sample a portion of the data_shards and bring back to a single panda dataframe at local, then users can use traditional tools on the papandas dataframe for visualization at local. \n",
    "\n",
    "Only three sets of plots from the original notebook is shown here since the logic is the same."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "454939be",
   "metadata": {},
   "source": [
    "### Analyze 'Fare', 'Cabin' and  'Survived'"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2639019",
   "metadata": {},
   "source": [
    "Process 'passengerIds' and 'Cabin' in parallel."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "f66319cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "# drop passengerIds  since it is not needed\n",
    "def drop_passenger(df):\n",
    "    df = df.drop(['PassengerId'], axis=1)\n",
    "    return df\n",
    "data_shards = data_shards.transform_shard(drop_passenger)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ef7764d8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>0</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>3</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>0</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>3</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>0</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass                                               Name  \\\n",
       "0         0       3                            Braund, Mr. Owen Harris   \n",
       "1         1       1  Cumings, Mrs. John Bradley (Florence Briggs Th...   \n",
       "2         1       3                             Heikkinen, Miss. Laina   \n",
       "3         1       1       Futrelle, Mrs. Jacques Heath (Lily May Peel)   \n",
       "4         0       3                           Allen, Mr. William Henry   \n",
       "\n",
       "      Sex   Age  SibSp  Parch            Ticket     Fare  Cabin Embarked  \n",
       "0    male  22.0      1      0         A/5 21171   7.2500      0        S  \n",
       "1  female  38.0      1      0          PC 17599  71.2833      3        C  \n",
       "2  female  26.0      0      0  STON/O2. 3101282   7.9250      0        S  \n",
       "3  female  35.0      1      0            113803  53.1000      3        S  \n",
       "4    male  35.0      0      0            373450   8.0500      0        S  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# fillna, apply, replace, map\n",
    "def process_cabin(df):\n",
    "    df['Cabin'] = df['Cabin'].fillna('X')\n",
    "    df['Cabin'] = df['Cabin'].apply(lambda x: str(x)[0])\n",
    "    df['Cabin'] = df['Cabin'].replace(['A', 'D', 'E', 'T'], 'M')\n",
    "    df['Cabin'] = df['Cabin'].replace(['B', 'C'], 'H')\n",
    "    df['Cabin'] = df['Cabin'].replace(['F', 'G'], 'L')\n",
    "    df['Cabin'] = df['Cabin'].map({'X': 0, 'L': 1, 'M': 2, 'H': 3})\n",
    "    df['Cabin'] = df['Cabin'].astype(int)\n",
    "    return df\n",
    "data_shards = data_shards.transform_shard(process_cabin)\n",
    "data_shards.head(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "11caa8ff",
   "metadata": {},
   "source": [
    "Plot relationship between 'Cabin', 'Fare' and 'Survived' at local."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "3f30775c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Cabin</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>19.157325</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>17.493135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>49.281278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>106.072642</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Fare\n",
       "Cabin            \n",
       "0       19.157325\n",
       "1       17.493135\n",
       "2       49.281278\n",
       "3      106.072642"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pdf = data_shards.select(['Cabin', 'Survived', 'Fare']).sample_to_pdf(frac=1.0)\n",
    "ax = plt.axes()\n",
    "data = pdf.groupby(['Cabin'])[['Survived']].count()\n",
    "sns.barplot(x=data.index, y=data['Survived'], alpha=0.8, color='violet', ax=ax)\n",
    "data = pdf.groupby(['Cabin'])[['Survived']].sum()\n",
    "sns.barplot(x=data.index, y=data['Survived'], alpha=0.8, color='cornflowerblue', ax=ax)\n",
    "ax.set_title('Survived or Not')\n",
    "pdf.groupby(['Cabin'])[['Fare']].mean() "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a62fde49",
   "metadata": {},
   "source": [
    "### Analyze 'Sex' and  'Survived'"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "611b0b76",
   "metadata": {},
   "source": [
    "Encode 'Sex', 'Pclass' in parallel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "3f48dbbd",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>SexByPclass</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>0</td>\n",
       "      <td>S</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>1</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>3</td>\n",
       "      <td>C</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>0</td>\n",
       "      <td>S</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>3</td>\n",
       "      <td>S</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>0</td>\n",
       "      <td>S</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass                                               Name  Sex  \\\n",
       "0         0       1                            Braund, Mr. Owen Harris    0   \n",
       "1         1       3  Cumings, Mrs. John Bradley (Florence Briggs Th...    1   \n",
       "2         1       1                             Heikkinen, Miss. Laina    1   \n",
       "3         1       3       Futrelle, Mrs. Jacques Heath (Lily May Peel)    1   \n",
       "4         0       1                           Allen, Mr. William Henry    0   \n",
       "\n",
       "    Age  SibSp  Parch            Ticket     Fare  Cabin Embarked  SexByPclass  \n",
       "0  22.0      1      0         A/5 21171   7.2500      0        S          1.0  \n",
       "1  38.0      1      0          PC 17599  71.2833      3        C          6.0  \n",
       "2  26.0      0      0  STON/O2. 3101282   7.9250      0        S          4.0  \n",
       "3  35.0      1      0            113803  53.1000      3        S          6.0  \n",
       "4  35.0      0      0            373450   8.0500      0        S          1.0  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def encode(data):\n",
    "    data['Sex'] = data['Sex'].map({'female': 1, 'male': 0})\n",
    "    data['Pclass'] = data['Pclass'].map({1: 3, 2: 2, 3: 1}).astype(int)\n",
    "    data.loc[data['Sex'] == 0, 'SexByPclass'] = data.loc[data['Sex'] == 0, 'Pclass']\n",
    "    data.loc[data['Sex'] == 1, 'SexByPclass'] = data.loc[data['Sex'] == 1, 'Pclass'] + 3\n",
    "    return data\n",
    "data_shards = data_shards.transform_shard(encode)\n",
    "data_shards.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e6ca8f7",
   "metadata": {},
   "source": [
    "Plot relationship between 'Survived' and 'SexByPclass' at local"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "decd664b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='SexByPclass'>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pdf = data_shards.select(['Survived', 'SexByPclass']).sample_to_pdf(frac=1.0)\n",
    "temp = pd.crosstab([pdf.SexByPclass,], pdf.Survived.astype(bool))\n",
    "temp.plot(kind='bar', stacked=True, color=['violet','cornflowerblue'], alpha=0.8, grid=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be54ad71",
   "metadata": {},
   "source": [
    "Process 'Sex', 'Pclass' in parallel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "e6d0770f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>SexByPclass</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>1</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass                                               Name  Sex  \\\n",
       "0         0       1                            Braund, Mr. Owen Harris    0   \n",
       "1         1       3  Cumings, Mrs. John Bradley (Florence Briggs Th...    1   \n",
       "2         1       1                             Heikkinen, Miss. Laina    1   \n",
       "3         1       3       Futrelle, Mrs. Jacques Heath (Lily May Peel)    1   \n",
       "4         0       1                           Allen, Mr. William Henry    0   \n",
       "\n",
       "    Age  SibSp  Parch            Ticket     Fare  Cabin  Embarked  SexByPclass  \n",
       "0  22.0      1      0         A/5 21171   7.2500      0         0          1.0  \n",
       "1  38.0      1      0          PC 17599  71.2833      3         2          6.0  \n",
       "2  26.0      0      0  STON/O2. 3101282   7.9250      0         0          4.0  \n",
       "3  35.0      1      0            113803  53.1000      3         0          6.0  \n",
       "4  35.0      0      0            373450   8.0500      0         0          1.0  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def fill_missing_embarked(data):\n",
    "    freq_port = data['Embarked'].mode()[0]\n",
    "    data['Embarked'] = data['Embarked'].fillna(freq_port)\n",
    "    data['Embarked'] = data['Embarked'].map({'S': 0, 'Q': 1, 'C': 2}).astype(int)\n",
    "    return data\n",
    "\n",
    "data_shards = data_shards.transform_shard(fill_missing_embarked)\n",
    "data_shards.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eae67300",
   "metadata": {},
   "source": [
    "Plot relationship between 'Sex' and 'Pclass' at local"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "52a186c3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:ylabel='Embarked'>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pdf = data_shards.select(['Survived', 'Embarked']).sample_to_pdf(frac=1.0)\n",
    "temp = pd.crosstab(pdf.Embarked, pdf.Survived)\n",
    "temp.plot(kind='barh', stacked=True, color=['darksalmon','tomato'], grid=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea48ca52",
   "metadata": {},
   "source": [
    "### Analyze 'Fare' and  'Survived'"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "593f3d26",
   "metadata": {},
   "source": [
    "Process 'Fare' in parallel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "e3be1983",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>SexByPclass</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>1</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass                                               Name  Sex  \\\n",
       "0         0       1                            Braund, Mr. Owen Harris    0   \n",
       "1         1       3  Cumings, Mrs. John Bradley (Florence Briggs Th...    1   \n",
       "2         1       1                             Heikkinen, Miss. Laina    1   \n",
       "3         1       3       Futrelle, Mrs. Jacques Heath (Lily May Peel)    1   \n",
       "4         0       1                           Allen, Mr. William Henry    0   \n",
       "\n",
       "    Age  SibSp  Parch            Ticket  Fare  Cabin  Embarked  SexByPclass  \n",
       "0  22.0      1      0         A/5 21171     7      0         0          1.0  \n",
       "1  38.0      1      0          PC 17599    71      3         2          6.0  \n",
       "2  26.0      0      0  STON/O2. 3101282     7      0         0          4.0  \n",
       "3  35.0      1      0            113803    53      3         0          6.0  \n",
       "4  35.0      0      0            373450     8      0         0          1.0  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def fare_info(data):\n",
    "    data.loc[data.Fare.isnull(), 'Fare'] = data['Fare'].mean()\n",
    "    data['Fare'] = data['Fare'].astype(int)\n",
    "    return data\n",
    "\n",
    "data_shards = data_shards.transform_shard(fare_info)\n",
    "data_shards.head(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5121fe9f",
   "metadata": {},
   "source": [
    "Plot relationship between 'Survived' and 'Fare' at local"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "0ff2a30f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxIAAAE9CAYAAACfoVQBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAABEnklEQVR4nO3deZgcZbn38e/dy+wzSSaZ7DtJgCSEJSEBZBWRsAYFBEEFxV3PcTniLoLbQfTo8VVU9IiCqCCIGCSC7DuBJJCNkJA9k32dfevu5/2japLJpGemq5dZkt/nuvqa7qqn7r67q6e67q56njLnHCIiIiIiIkGEejoBERERERHpe1RIiIiIiIhIYCokREREREQkMBUSIiIiIiISmAoJEREREREJTIWEiIiIiIgEFunpBLJl0KBBbuzYsT2dhoiIiIhIn7Zw4cJdzrmKrtodNoXE2LFjWbBgQU+nISIiIiLSp5nZhlTa6dQmEREREREJTIWEiIiIiIgEpkJCREREREQCUyEhIiIiIiKBqZAQEREREZHAVEiIiIiIiEhgKiRERERERCQwFRIiIiIiIhKYCgkREREREQlMhYSIiIiIiASmQkJERERERAJTISEiIiIiIoGpkBARERERkcBUSIiIiIiISGAqJEREREREJDAVEiIiIiIiEpgKCRERERERCUyFhIiIiIiIBKZCQkREREREAlMhISIiIiIigamQEBERERGRwFRIiIiIiIhIYCokREREREQkMBUSIiIiIiISmAoJEREREREJTIWEiIiIiIgEpkJCREREREQCUyEhIiIiIiKBqZAQEREREZHAclpImNlsM1tpZqvN7KtJ5ueb2X3+/PlmNrbd/NFmVmtmX8plniIiIiIiEkzOCgkzCwO3AxcAk4H3m9nkds1uAPY65yYAPwV+2G7+T4B/5SpHERERERFJTy6PSMwEVjvn1jrnmoF7gTnt2swB7vLvPwCca2YGYGaXAeuA5TnMUURERERE0pDLQmIEsKnN40p/WtI2zrkYUAUMNLMS4CvALTnMT0RERERE0hTp6QQ6cDPwU+dcrX+AIikz+zjwcYDRo0d3T2bSqT/P35hSu2tmaX2JiIiI9GW5LCQ2A6PaPB7pT0vWptLMIkA/YDcwC7jCzG4D+gMJM2t0zv2i7cLOud8AvwGYMWOGy8WLEBERERGRQ+WykHgNmGhm4/AKhquBa9q1mQtcB7wMXAE85ZxzwBmtDczsZqC2fREhIiIiIiI9J2eFhHMuZmafBR4DwsCdzrnlZvYdYIFzbi7wO+CPZrYa2INXbIiIiIiISC+X0z4Szrl5wLx2025qc78RuLKLGDfnJDkREREREUmbrmwtIiIiIiKBqZAQEREREZHAVEiIiIiIiEhgKiRERERERCQwFRIiIiIiIhKYCgkREREREQlMhYSIiIiIiASmQkJERERERAJTISEiIiIiIoGpkBARERERkcBUSIiIiIiISGAqJEREREREJDAVEiIiIiIiEpgKCRERERERCUyFhIiIiIiIBKZCQkREREREAlMhISIiIiIigamQEBERERGRwFRIiIiIiIhIYCokREREREQkMBUSIiIiIiISmAoJEREREREJTIWEiIiIiIgEpkJCREREREQCUyEhIiIiIiKBqZAQEREREZHAVEiIiIiIiEhgKiRERERERCQwFRIiIiIiIhKYCgkREREREQlMhYSIiIiIiASmQkJERERERAJTISEiIiIiIoGpkBARERERkcBUSIiIiIiISGAqJEREREREJDAVEiIiIiIiEpgKCRERERERCUyFhIiIiIiIBKZCQkREREREAlMhISIiIiIigamQEBERERGRwFRIiIiIiIhIYCokREREREQkMBUSIiIiIiISmAoJEREREREJTIWEiIiIiIgEpkJCREREREQCUyEhIiIiIiKBqZAQEREREZHAclpImNlsM1tpZqvN7KtJ5ueb2X3+/PlmNtafPtPM3vBvi83sPbnMU0REREREgslZIWFmYeB24AJgMvB+M5vcrtkNwF7n3ATgp8AP/enLgBnOuROA2cAdZhbJVa4iIiIiIhJMLo9IzARWO+fWOueagXuBOe3azAHu8u8/AJxrZuacq3fOxfzpBYDLYZ4iIiIiIhJQLguJEcCmNo8r/WlJ2/iFQxUwEMDMZpnZcmAp8Mk2hYWIiIiIiPSwXtvZ2jk33zk3BTgZ+JqZFbRvY2YfN7MFZrZg586d3Z+kiIiIiMgRKpeFxGZgVJvHI/1pSdv4fSD6AbvbNnDOrQBqgantn8A59xvn3Azn3IyKioospi4iIiIiIp3JZSHxGjDRzMaZWR5wNTC3XZu5wHX+/SuAp5xzzl8mAmBmY4BjgPU5zFVERERERALI2UhIzrmYmX0WeAwIA3c655ab2XeABc65ucDvgD+a2WpgD16xAXA68FUzawESwKedc7tylauIiIiIiAST0yFVnXPzgHntpt3U5n4jcGWS5f4I/DGXuYmIiIiISPp6bWdrERERERHpvVRIiIiIiIhIYCokREREREQkMBUSIiIiIiISmAoJEREREREJTIWEiIiIiIgEpkJCREREREQCUyEhIiIiIiKBqZAQEREREZHAVEiIiIiIiEhgKiRERERERCQwFRIiIiIiIhKYCgkREREREQlMhYSIiIiIiASmQkJERERERAJTISEiIiIiIoGpkBARERERkcBUSIiIiIiISGAqJEREREREJDAVEiIiIiIiElhKhYSZPWhmF5mZCg8REREREUn5iMQvgWuAt83sVjM7Ooc5iYiIiIhIL5dSIeGce8I5dy1wErAeeMLMXjKzD5tZNJcJioiIiIhI75PyqUpmNhC4Hvgo8DrwM7zC4vGcZCYiIiIiIr1WJJVGZvZ34Gjgj8Alzrmt/qz7zGxBrpITEREREZHeKaVCAvitc25e2wlmlu+ca3LOzchBXiIiIiIi0oulemrT95JMezmbiYiIiIiISN/R6REJMxsKjAAKzexEwPxZZUBRjnMTEREREZFeqqtTm87H62A9EvhJm+k1wNdzlJOIiIiIiPRynRYSzrm7gLvM7HLn3N+6KScREREREenlujq16QPOuXuAsWb2xfbznXM/SbKYiIiIiIgc5ro6tanY/1uS60RERERERKTv6OrUpjv8v7d0TzoiIiIiItIXpDT8q5ndZmZlZhY1syfNbKeZfSDXyYmIiIiISO+U6nUk3u2cqwYuBtYDE4Abc5WUiIiIiIj0bqkWEq2nQF0E3O+cq8pRPiIiIiIi0gd01dm61T/N7C2gAfiUmVUAjblLS0REREREerOUjkg4574KnAbMcM61AHXAnFwmJiIiIiIivVeqRyQAjsG7nkTbZe7Ocj4iIiIiItIHpFRImNkfgaOAN4C4P9mhQkJERERE5IiU6hGJGcBk55zLZTIiIiIiItI3pDpq0zJgaC4TERERERGRviPVIxKDgDfN7FWgqXWic+7SnGQlIiIiIiK9WqqFxM25TEJERERERPqWlAoJ59yzZjYGmOice8LMioBwblMTEREREZHeKqU+Emb2MeAB4A5/0gjgoRzlJCIiIiIivVyqna0/A7wDqAZwzr0NDM5VUiIiIiIi0rulWkg0OeeaWx/4F6XTULAiIiIiIkeoVAuJZ83s60ChmZ0H3A88nLu0RERERESkN0u1kPgqsBNYCnwCmAd8M1dJiYiIiIhI75bqqE0JM3sIeMg5tzO3KYmIiIiISG/XaSFhZgZ8G/gs/tELM4sDP3fOfaer4GY2G/gZ3lCx/+ecu7Xd/HzgbmA6sBu4yjm33j996lYgD2gGbnTOPRXwtUkPOGrj/ak1DJfzl7UFvL4nyicvn834ipLcJiYiIiIiWdXVqU1fwBut6WTnXLlzrhyYBbzDzL7Q2YJmFgZuBy4AJgPvN7PJ7ZrdAOx1zk0Afgr80J++C7jEOXcccB3wxwCvSXq5hINblxbztUVl3L++gPN++hxfe3AJ26oaezo1EREREUlRV4XEB4H3O+fWtU5wzq0FPgB8qItlZwKrnXNr/RGf7gXmtGszB7jLv/8AcK6ZmXPudefcFn/6crxO3vldvxzp7WIJ+OX6Yfx6ZTHXjq/nlYt288FTxvDAwkou/H/Ps7euuesgIiIiItLjuiokos65Xe0n+v0kol0sOwLY1OZxpT8taRvnXAyoAga2a3M5sMg519T+Cczs42a2wMwW7Nyprht9wZ2bhvD8nn58aUot3zuxliGFCW6+dAp///Q72FffzM+efLunUxQRERGRFHRVSHT283DOfzo2syl4pzt9Itl859xvnHMznHMzKioqcp2OZGhfS5hndvfnvIq9fPbYeswOzJs6oh9XzxzNPa9sYM3O2p5LUkRERERS0lUhcbyZVSe51QDHdbHsZmBUm8cj/WlJ2/gXueuH1+kaMxsJ/B34kHNuTWovR3qzJ3b2J+6MCwfvSTr/C++aREE0zH/PW9HNmYmIiIhIUJ0WEs65sHOuLMmt1DnX1alNrwETzWycmeUBVwNz27WZi9eZGuAK4CnnnDOz/sAjwFedcy8GflXS68QS8PjOAZxQVsvwgpakbSpK8/n0OUfxxIodvLj6kDPqRERERKQXSfWCdIH5fR4+CzwGrAD+6pxbbmbfMbNL/Wa/Awaa2Wrgi3gXvsNfbgJwk5m94d8G5ypXyb2X95axLxbhgsF7O233kXeMY0T/Qr73yAoSCddN2YmIiIhIUCldkC5dzrl5eFfBbjvtpjb3G4Erkyz3PeB7ucxNutejOwYwPL+JaWV1nbYriIb53Lsm8uUHlrBgw15mjivvpgxFREREJIicHZEQabWqtoDV9YXMHryXkHXd/qLjhlGUF+bBRZW5T05ERERE0qJCQnLu3zsHUBiKc9bAqpTaF+dHmD11KI8s3UpjSzzH2YmIiIhIOlRISE7FHSyqKmHWgBoKwqn3ebj8pJHUNMZ4YsX2HGYnIiIiIulSISE5taaugLp4mBP6dd43or1Txg9kWL8CHlzUfsRgEREREekNVEhITr1RXYLhOK40WCERDhmXnTiCZ1ftZGfNIRc1FxEREZEepkJCcmpxVTETixsoiSQCL/veE0cQTzjmLt6Sg8xEREREJBMqJCRnqmNh1tQXcHwXQ752ZOKQUqaN7MffX9foTSIiIiK9jQoJyZml1UU4LHD/iLbec+IIlm2uZu3O2ixmJiIiIiKZUiEhObO4uoTScIzxRY1pxzhv8hAAnlyxI1tpiYiIiEgW5PTK1nLkSjh4o6qY48rqk16Ebv66Pfvvr4lv7DTWMUNLefKt7XzszPHZTlNERERE0qQjEpITGxvyqYpFOKFf5qcknXvsYF5bv5eq+pYsZCYiIiIi2aBCQnLijepiAKal2dG6rXceM4R4wvHs2zszjiUiIiIi2aFCQnJiSXUxYwobGRCNZxzrhFH9GVicx5O6yrWIiIhIr6FCQrIu5uDt2kKmlNZnJV44ZJxzzGCeWbmTWDz49ShEREREJPtUSEjWbagvoNmFmFTckLWY5x4zmKqGFhZu2Ju1mCIiIiKSPo3aJFm3qq4QgIklqRUSR228v/MG4XLOaDGiNognn3mSWXvqYMaHM01TRERERDKgIxKSdW/XFlAebWFQXixrMUuijlMqWnhya37WYoqIiIhI+lRISNatqitiUopHI4I4d3gTa2oirK8NZz22iIiIiASjQkKyam9LmJ3N0az2j2h19tBmAJ7fnpf12CIiIiISjAoJyapVtX7/iBwUEmOK44wqjvPsNhUSIiIiIj1NhYRk1aq6QqKWYFxRU9Zjm8EZQ5p5eWeUFg0DKyIiItKjNGqTZNWq2kLGFTUSDbmsxZy/bs/++8Nopi42ktseXcm4QcWHtL1m1uisPa+IiIiIdExHJCRrmmJx1tYX5KSjdasppfWEcLy9oyZnzyEiIiIiXVMhIVmzfEs1MRdiUnFjzp6jOJJgQnEDq3fU5uw5RERERKRrKiQkaxb5V53ORUfrto4vq2Pz3gbqmrJ3nQoRERERCUaFhGTNoo17qchroTyLF6JLZlpZHQ5Ys1NHJURERER6igoJyZrXN+5jQo6PRgBMKG6kIBribZ3eJCIiItJjVEhIVuysaWJrVWO3FBIhgwkVJby9vQbnsjc6lIiIiIikToWEZMWyzVUAjC/KXUfrtiYOLqW6McaOmuxfr0JEREREuqbrSEhWLKmswoycXIgumXNjz/J3JrB35QucNmTvgRnh8s4XnPHh3CYmIiIicoTQEQnJiqWb93FURQmF4e654nRFfozh+U0sqT70onQiIiIiknsqJCQrllRWMW1Ev259zuP71fFmTRHNCevW5xURERERFRKSBdurG9lR08RxI7u3kJhWVkezC/FWbWG3Pq+IiIiIqJCQLFhS6XW0ntbNhcTkknrC5nR6k4iIiEgPUCEhGVtauY+QweRh3VtIFIQdx5TUs1iFhIiIiEi3UyEhGVuyuYqJg0spzAt3+3NPK6tjY0MBe1u6/7lFREREjmQqJCQjzjmWba7q9v4RraaV1QGwVEclRERERLqVCgnJyNaqRnbVNnd7/4hWYwubKIvEdHqTiIiISDdTISEZae1ofVw3D/3aKmRwXFkdS6uLSbgeSUFERETkiKRCQjKydPM+IiHj2GFlWYtpLk441gAutcrg+LI6qmIRNjTkZy0HEREREelcpKcTkL5tSWUVk4aUUhDNrLNzYeMO+te8TVn9ekrrNxJOtBC3CM3RMpryBrCr//HsKTsWZ4c+z/F+P4k3qkq4Gh2WEBEREekOKiQkbc45lm6uYvaUoWnHCMcbGbX9KQbvXYAB9fkV7Ox/Ak3R/uTFashrqaG4cQsTKh+kKVrGtvJZ7CifTiKUtz9G/2ic8UUNvF5VDNRm/sJEREREpEsqJCRtlXsb2Fffkt6ITc5RXv0mY7Y9RjRWx/bymWwZdDot0ZKkbfvXrmLYrlcYs/1xBu9dxOpRl1NfcKCAObFfHQ9uHci+5jr65+mohIiIiEiuqY+EpC3tjtbOMWrHU0ys/BvNkVKWjb+BDcNmJy8iAMzYV3o0K8Zdx4oxHyScaGLK2t8xeM/C/f0oTiirxWE8tz0veQwRERERySoVEpK2JZv3EQ0bRw8tTX0h5xi97d8M3/Ui2wdMZ/n4G6gvHJ7y4tUl41h61CeoLhrDuK2PcNTmhzAXZ0JxI6XhGM9sVSEhIiIi0h1USEjalm2u4pihZeRHUuxo7Rxjt85j2J75bC2fxfphF4IF/wjGIsWsHHMtlRVnMahqKRM2/Y2wi3N8vzqe2ZavYWBFREREuoEKCUmLc44llcGuaD16+78ZsnchWwadxsah7waz9BMwY/Pgs9gw9N2U17zFhMoHmF5WxZ7mEEv2quuPiIiISK6pkJC0bNhdT01jjGkp9o8YWLWMYbvns618JpsGn5tZEdHGtoGnsH7obMprVvKBmjvJp4Wnt+p6EiIiIiK5pkJC0rJks9/ROoUjEoWN2xm3+WGqi0axceh5WSsiWm0fOJN1wy6kom4Vvyr5LU9vjWY1voiIiIgcSueASFqWVu4jLxJi0pDOO1qH441M2nQ/8XA+q0dekfSCctmwo3wG0Vgt79z5HIsahrGz8XQqCtRZQkRERCRXcnpEwsxmm9lKM1ttZl9NMj/fzO7z5883s7H+9IFm9rSZ1ZrZL3KZo6RnSWUVk4eVEQ138hFyjvGb/0Fe8z7eHnkFLdEAozulYXPFWeytmMmXovez5q3FOX0uERERkSNdzgoJMwsDtwMXAJOB95vZ5HbNbgD2OucmAD8FfuhPbwS+BXwpV/lJ+hIJx7LNVUzr4rSmgVXLKK9ZyaYh76S2eHTuEzOj//T3sYhjmF55N+xZm/vnFBERETlC5fKIxExgtXNurXOuGbgXmNOuzRzgLv/+A8C5ZmbOuTrn3At4BYX0Mmt31VHXHGdqJx2tI7Faxmx7lJrCEWwbeEq35WaRCE8M/xSVbhCJBX+Axqpue24RERGRI0kuC4kRwKY2jyv9aUnbOOdiQBUwMIc5SRYs8ztad3ZEYuzWRwknmlk74tK0rhWRibNHRfhE8xdIxBph0V2QiHfr84uIiIgcCfr0qE1m9nEzW2BmC3bu3NnT6RwxllRWURANMaGiJOn8AdUrGFj9JpsrzqIxv6Kbs4Ppg1rYkzeCe4qu905vWjG323MQEREROdzlspDYDIxq83ikPy1pGzOLAP2A3ak+gXPuN865Gc65GRUV3b/DeqRaunkfU4b3I5Kko3U43sDYrfOoKxjG1kGn9kB2EDY4b3gTP9p3JrExZ8C6Z2HL6z2Si4iIiMjhKpeFxGvARDMbZ2Z5wNVA+5+G5wLX+fevAJ5yzmnMzl4sFk+wbHM1x3XQP2LEzueJxupYO/zinA31morZI5qoi4V4bsCVMGAsLP4L1GzrsXxEREREDjc5KyT8Pg+fBR4DVgB/dc4tN7PvmNmlfrPfAQPNbDXwRWD/ELFmth74CXC9mVUmGfFJesCq7bU0tMQ5cXT/Q2fuWceQPa+xs/8J1BcO6/bc2jp1cDOl0QT/2lYMJ10P4TxYeCc01fRoXiIiIiKHi5xekM45Nw+Y127aTW3uNwJXdrDs2FzmJul5fdNeAE4cNeDQmU/cjCNE5eBzujmrQ+WF4F3Dmnl8Sz6xk/oTOek6mP8r+Mdn4Mq7sn51bREREZEjTZ/ubC3db9GGfQwszmNUeeHBMzbOhzcfYuug03J+4blUnT+ikX3NIebvjMKgiXDMxfDmP+Dl23s6NREREZE+T4WEBPL6pr2cOLo/1vYXfefg39+A0p7rYJ3MWUOaKY4kmLupwJsw/hw49hJ4/CZY/2LPJiciIiLSx6mQkJTtq29m7c46Thzd7rSm5Q9C5Wvwzm+SCOX1THJJFEbgghFNPFKZT2Mc73SmOb+E8nHwwIfV+VpEREQkAyokJGVvbNoHcHBH65ZGeOJmGHIcHP/+nkirU+8d00htLMS/t+R7EwrK4H1/9Dpd3/9hiLf0bIIiIiIifZQKCUnZoo37CBlMG9n/wMRX74B9G+H870Go54Z77cgpFS0ML4zz4IaCAxOHTIZLfgYbX/KKIBEREREJTIWEpOz1jXuZNKSUknx/sK+63fDc/8DE82H82T2aW0dCBu8Z08hz2/LY0dDm4z7tfXDyx+DlX8Dyv/dcgiIiIiJ9lAoJSUki4Xhj076D+0c8eys018K7v9tziaXgvWMaSWD8Y1P+wTPO/wGMnAkPfRq2Le2Z5ERERET6KBUSkpK1u2qpaYxxUmv/iF1vw4I7Yfr1UHF0T6bWpaNK45xQ3sLf2p7eBBDJg6v+CAX94S/XeEdYRERERCQlKiQkJYs27gM4cETi8ZsgUghnf63nkgrg8jGNvFUV5c0t1QfPKB0KV98Dtdvh/uvU+VpEREQkRSokJCWvb9xLWUGE8YOKYd3zsHIenPFFKKno6dRScvHIRvJCjntf23jozBHT4dL/B+ufh3992bsuhoiIiIh0SoWEpOT1jfs4YfQAQvgXn+s3Ck75dE+nlbIB+Y5LRjXywMJKqhqSHHU4/mp4x+e807Ve/Fn3JygiIiLSx6iQkC7VNLawcnsNJ47qD0vug62L4dxvQ7Sgy2V7k49MbKC+Oc59yY5KAJx7M0x5LzzxbVj6QLfmJiIiItLXqJCQLr26bg/OwamjC+HJ78Dwk2Dq5T2dVmBT+sc4ZXw5d720gVg8cWiDUAgu+xWMeQc89ClY/0L3JykiIiLSR6iQkC69vGY3eZEQ07f8GWq2eMOmhvrmR+cj7xjH5n0N/PvN7ckbRAvgqntgwFhvJKctb3RneiIiIiJ9Rt/cG5Ru9dKa3bxzhCP60s/g2EtgzKk9nVLazj12CKPLi7jzhXUdNyoqhw88CAVl8MfLYNuybstPREREpK9QISGd2lvXzIpt1XzW/grxZnjXLT2dUkbCIeP608ayYMNeFm/a13HD/qPguochWgR3Xwo7VnRbjiIiIiJ9gQoJ6dT8dbuZyCambP8HzPwYDDyqp1PK2PtOHkVpfoRfPL2684bl47xiIhSFu1RMiIiIiLSlQkI69fKa3Xwr78+QXwpn3tjT6WRFSX6ET5w1nsff3M7CDXs6bzzwKK+YsBDceT5sfKV7khQRERHp5VRISKeaVz7OGbYYO/PLXt+Bw8RHTh/H4NJ8/nveW7iuLkBXMQlu+DcUV8Ddc+CtR7onSREREZFeLNLTCUjvtbOqnutqf0dV0Uj6zfxYT6eTVUV5ET7/rkl8/e9LeWLFDs6bPKTjxgt+7/096Xp47Tdw77Uw9b0w5nQwS77MjA9nPWcRERGR3kRHJKRDW57+DceENrH3tK9DJL+n08m6980YyfhBxdz26FvJryvRXn4JnPIZGHwsLPsbLP6z1wFdRERE5AikIxKSXP0eJiz9CQs5luNPu7qns0nZ/HWd93lYE/euan3NrNFEwiG+PPtoPnnPIu5fWMn7Z47u+gki+XDyR2HVY/D2Y1C9BWZ8BIoGZiN9ERERkT5DRyQkuWf+m4J4DQ8P/zyRSLins8mZ86cM5eSxA/jveSvYWtWQ2kIWgqMvgJM/Bg174LkfwaZXoau+FiIiIiKHER2RkENtW4Z77f+4J3YuI4+d2dPZ5JSZ8aMrjueCnz3Plx9Ywt0fmYl11O+hvSFT4PT/8k5xWvxn2LYYjrvKu5BdOlr7YgSl/hgiIiLSA3REQg7mHPzryzRFyvhJ7ErOPbaTTsiHibGDivnGRcfy/Nu7uOeVDcEWLh4Ep34WJl8GO1fBs7fChhchEc9JriIiIiK9hQoJOdjyB2HDi9xd+EGGDR3GuEHFPZ1Rt7h21mjOnFTB9+etYN2uumALWwjGnw1nfglKh8HS++GOs2D9CznJVURERKQ3UCEhBzTsg0e/Tmzwcfxw5yzePWVoT2fUbcyM2y6fRn4kzKfuWUh1Y0vwICVDvKMTJ10PjfvgDxfBX66BrUuyna6IiIhIj1MhIQc8fhPU7eDJCd8g7kLMPoIKCYCh/Qr4xTUnsnpHLZ+4eyFNsTROTzKD4SfAZ1+Dd34TNrwAd5zhXXtCBYWIiIgcRlRIiGfd87DoLjj1M/xl80BGlxdx7LDSns6q250xsYIfXTmNl9fu5ot/XUwikeZITNFCOPNG+NwSOPtr3vt7xxlw16Xw9uMa4UlERET6PBUSAi0N8PB/woBxVJ96Iy+u3sXsqUNTH73oMPOeE0fy9QuP4ZElW/nGQ8uIpXCtug4V9oezvwqfXwLvuhl2rYI/XQG3z4JXfg31nV/3QkRERKS30vCvAs/cCnvWwofm8vSaWlrijvOnHP6jNXXmY2eMp6qhhdufXsPyt4r4/LgtFEc6ryhmjSvveGZhfzj9C96VsZf/Heb/Ch79inc62eQ5MP067yjFEVq8iYiISN+jIxJHuo3z4aWfw4kfgPFn8eiybVSU5nPiqAE9nVmPMjNuPP8Ybrt8GstrivnmW2PY0hjNPHAkD46/Cj7+DHzieTjpg95Vsv9wETzzA1jzFDTVZP48IiIiIjmmQuJI1rAP/vZR6DcSzv8BjS1xnlm5k/OnDCEU0i/jAO87eRTfmriRmniYr64Yxz+2lWd2qlNbw6bBRf8D//UWXPYryCuBFXPhiW/Dq7+BzYsg3pylJxMRERHJLp3adKRyDh7+HNRsgY88BgX9mLeokoaWOBceN6yns+tVji1t4IfHruf3m4bw582DeXZ3P64btZ1ppfXZORMprwhOuAZiTVCzDSpfg80LYcfdEMmHocfDyBkwcIJ3zQoRERGRXkCFxJFq0d3w5kNw7re9nVTgrpfWM2FwCaeOH9izufVCA/NifOmozSyqKub3G4fwg7dHM7awkYuG7OG0AdVEsrV/XzoUjr0EjrkIdq+Bza/B1sVQ+SoU9IMR02HEDCgbnqUnFBEREUmPCokj0Y4V8K+veFdjfsfnAXh9414WV1bx3TlTjtjRmlJxUr86pk5Zx/N7ypi3vZzb1w/n7srBnNy/loZCOG1wM3kpFBV/nr/xkGlHbWw/gtNAKJvNrKlXwPZlULkQ1j7j9aMoG+4VFCOmZ+V1iYiIiASlQuJIU7cL/nwV5JfCe+6AkLfXe9dL6ynJj/Cek0b2cIK9X17Ice6gKt45sIrF1cU8u7sfL+0p5akXwpREEkwf2MLMmtWcPLacKcPLKM7P8N8snAfDT/JuTbWw5XXvSMWKubDiYVj7NEy7yjuKUdAvOy9SREREpAsqJI4ksSbvCsu12+H6R7zTaIAdNY08snQr184aQ0mmO71HEDM4oV8dJ/SrozlhNBUO4elteby6K48fPbZyf5txg4qZOrwfU0eUMXV4P6YMz2BnP78Exp3h3Wp3wOYFsHMlPPQpCOfDxPNg6uUw6XzIK87SKxURERE5lPYajxTOwdz/hE2vwBW/398vAuDeVzfREnd86NQxPZhg35YXcpwxvJl3DfdGWdrdZLy+O8ryfRGW7Wtiwapq5i4O728/OK+ZcUWNjCtq8v82QtDRZUsGw9EXwjV/9TpoL3vQu0bFW/+EaBEcfYFXVEx4l9dpW0RERCSLVEgcKZ79ISy5F875Jkx97/7JLfEEf5q/gTMnVTC+oqQHE+weR22837sT7uTicVkwMN/xrjaFBXjFxfK9UZbti/Dc5gTr6guYv69s//zyaAuTS+uZVlbHcaX1lOfFUnsyMxg107ud/33Y8BIs+xu8+Q/vb16JV0wcc7F3xKKwf5ZfrYiIiByJVEgcCZ69DZ75bzj+GjjzSwfNuve1TWyvbuLW947tmdyOIAPzHWcObebMoc1Mz/c6VtfHQ6yvz2ddfQGr6wpZWl3MC3u8U5/GFTUys38NAweGmFAWT+1JQuEDpz5d+CNY96zXj+Kted4oXaEIjD3D609x9IXQb0SOXq2IiIgc7sw519M5ZMWMGTPcggULejqN3ueZW/0i4v0w53ZvR9O3u7aJd/7Ps0weVsafPzYrK6M1zb//fzKO0VfNGpf6UY7569qP0ORJONjYkM/i6mJe21fK23WFAEzu38KVYxqZM7qR8vx2/7MzPtz1EyYSXn+Ktx7xTn3avdqbPngyjDsLxp8FY94BBWWdxxEREZHDnpktdM7N6KqdjkgcrpyDp38Az90GJ1wLl/78oCIC4LZHV1LXFOM7GvK11wgZjC1qYmxRE3OG7mFPc4T5+0p5bncZtywu5XtLSjipXy1nD6zihH61RAzWxL2hZK+ZNbqTwKEDpz+ddwvsXAUr53nDyS78Pcz/FVgYRpzkFRbjzvBGiVJhISIiIh1QIXE4aq6Huf8Byx6AEz8Al/x8/zCvrRZt3Mt9CzbxiTPHM3FIaQ8lenjp6ChDJsrzYlwweC8XDN7Lhvp8nt3djxf2lPHavlLKIjHOKK9mfL8GhvUrDBa4YpJ3O/3z0NLoXfBu7bPeqVAv/BSe/zFgMGiiV1CM8IefHXocRAuy/jpFRESk79GpTYebfRvh3mtg2zI491tw+he9zrhtxBOOS3/xArtrm3niv87K6pCvR/KpTd0l5mBxVQlP7+7HoqoS4s4YW9jIhya1MGd0IwPbn/oUVEsD7F3vfZaqNsK+TdBU7c0LRWDgRK8IGdTmNnCCNzStiIiI9Hk6telItOKf8PB/QjzmDQk66d1Jm9322Fss31LNz99/oq4b0QdFDKb3r2V6/1qqY2Fe2lPKs7v78Z3FpfxgSQnnDGvmstGNnD20meJIGkVFtBAGH+vdwDtNrrEKBk2AzYu8K6NvW+Z14naJA8uVjYD+Y6D/KOg/GvqN8u+P8ebpSIaIiMhhRXuRh4PqrfCvG70duyHHwZV/8Hb6kvjdC+u449m1XDtrNBdPG9a9eUrWlUXizB68j9mD9zGgvIK/bSjgwY0FPL6lH3khx+mDmzl3eBOnVbQwtiTe/uBUasy8IWOPvcS7tYo1wZ61sGuVf3vbO3qx/kWouf/gIgMgWuxdefugW3/vb6H/OFp8yBG0lKXS6VxERESyRoVEX9bSAAt+743MFGuEc78Np/0HhJNf2Wzu4i18959vMnvKUL4zZ2pOOli/vHgZpx4/df/j+7cMAmDkzmf4XPhBAJqJkEds/1+AzQxkBLtpJsJd7mKutscoopF6Clgx9Ubc0r8yynYyhD0scEcDMMveooZCror+nN+2fGX/8veHLmBS/G2uav4Wz+f/J8+ETgPgjf7n8f09X+Qb5T/h/Xtu5y/ln+HK4bv253r1wqO5fNju/dMiy+7jm9Eb+V7LjzieVWyjnM1TP8Oxy35ECQ3UUsiKqTdSteZV+h01k88sOYrbp63Z/7hw+b0ssaOZOPlEANzSv2LHvY/IsvuITb2KaxdO4k/TV+1vf+yyH1FNEQaUUs96G8W2gvHsaIpyaeIJVky9EYBRy25n09TPAFC4/F4Gut3stoFMuvjTXFr5Y7580adYsCvKv7fk89jmfJ7a5l2MblhhnJmDWphW3sK0ATEm94/tP2Jx/2NPc+X55+z/u/nh7zLikm8BsOifv+akiz956MqO5FN9+zmU3bLt0HnxFqjeAvPvgIa90LjPv1VBQxWxnSuJkDh0uVAkeaFR0I91rz/NuHOu8x6HvE3Xaw//mpMv+aSXY4BCYvn3T2fKN15IuX1vs/nbRzHiljUptf3p46v4wnmTMoqRqvt//Gmu/NIv01p2+fdPp745xsm3vJLVnESkb9l681EMuzm72ybJHRUSfVFzPSy4E178GdTt8EbZufinMPCopM2dc/z99c185W9LmDmunP+9+gTCodyM0vT5yIPM50Ah8cBWr5BYX/Dg/mn5fvHQ+hdgJLv3T/u4PbR/ehkNAJwSemv/tFPsrYPmr6gtYmTBgeU/4B6GEDiMkbbbewx8c+v7+XFBjAe2DuLHBSu5fOuggwoJh/FAm2nTbSUraouYXrByf46bgTJrOCi3dzc+ynxmsqsletDjaaximlvFfE7c/xrm+3HnAzFCB7Uvs4b9MQFv+cZV3oM2q2u47WZTmzYYjPDfvymJlWAwq6KFWRUtfHNaLetqw7y4I4+XdkR5ZWeUf2w6cIrR0MI440ri/KXlH/xk+cV8seUfPL7lfM6z3WytDzGoIMFJ+O/3gt/TXpk1JJ2+36CJSSdH/vn5Aw9O+5xXYLQWGq23fZtINCwl5LzPyTiAp74LQEu4iOZoGSfbNra/eLeX46K7oWw4lA6HsmFeEdJBsTylZWnHOfcBI2xX1418P3vy7aSFRJAYqbqy9k9AF4VEB5+XKS1Lvc95svk62iRyxBhG9rdNkjsqJPoK57zz0xf/GZY+4O10jTsTzvo9jD29w8X21jXzzYeW8cjSrcwcW85vPzSDgmi4w/ZyeDGD8aVxxpc28MGjvCJlR0OIB95qYGNDAVub8thSnwfAz1cU8cUC+NhL/VlfAKfOay0C4cR/DKAonPBv8f33fwd8+SUjP5RgUkUR+WFHQestxEGPoyGIhry/Q9vkGOs/jrAl3+d/be1uwvFG8mLVTFtzB2uHX0JeSzV5sRqiLdUUA+XVfqEz9z8OXjhS6BUUrYVF6TC/0PBP6du3CUqHdngET0RERDqX00LCzGYDPwPCwP85525tNz8fuBuYDuwGrnLOrffnfQ24AYgD/+mceyyXufZKLQ2w4SVY+zSsfBR2vw2RAu+qxCd/DMac2uGi9c0x/vHGFn76+Cr21jfzldnH8PEzx+fsSIT0HYMLE0zvX8f0/nUHJi6He05aCW/CD45ZD+vho6O3UdUShr1wQlkd9fEQDfEwdbEwO5ui1MfDEIG/bqnwYlSmnsP6Nv2uJzw4GIC8kCNirQWHV3TE4/2JmCNsjue5g09sv4ywee0i5niIj/OJwh9zZ+2n+dMpDzPU9jAwsYfy+C7KWnZS1LSDaP12bNOrULMV4s0Hnvh/pwIGxRUHFxxtj2qUDoPCcq+PSCQ/zXc8A50d7Wk/zzlIxCERAxfzBl1wcY6yMnjq+62NvHatnrjF+3vMxW3mtWljIf9mbe6HvGvStH3cOh+ganObdhGvUIvkQygKoVCHwyTP8v+2nR/kIo8i0gt1tg2Tw0LOCgkzCwO3A+fh7WK8ZmZznXNvtml2A7DXOTfBzK4GfghcZWaTgauBKcBw4Akzm+Sci+cq3x7XsBf2rIMdb8LWxbB1CWx9w+v7EM6D0ad4/R+mXOadI54sRHOcxZX7eHTZNv62sJKaphhTR5Rx5/UnM3VE8mVEWkX8GvOo4kYAzqvY503YC58cm6QfBMBy+NOJb9HsQkwdOYDGuNEUN/8vNPr3GxNGSwKaE0YsAbTZCrxv+E7izog5I5Yw4g7vvrMD051BIxSG48QSRkvCaHDejuvrVcUQhm88UwNEgSH+zZMXcgzKTzAoP87Y4mrGRXfzhd238OKQaxk0oB/9Y7soadpB/p4NhDe9gjXs7eANKvBOlyrs7/fdKPOmRQsP/du6o4212cn23+BEi7eTH2/27/u3tvfjzRBvZl/lSnBxXCIOLoElYuAS9Adq591EyMUJEyPsYkRIvnl8Mh94roOV/sJPDv6bDT+d3OGshEU40YWIW4QYYeIWIU6YuB04Sjri7XuIWZR4KI+d24sIR/OIbFlFtLCEvMISwvklkFcM0SLIK/I66OcVQV7JwdPCOuAuIpJrudzSzgRWO+fWApjZvcAcDtqFYA5ws3//AeAX5vUAngPc65xrAtaZ2Wo/3ss5zDczsSZoqvF2/GNN/l//fkuDNw5//R7v1rAH6nd7t7pd3pj9jfsOxMor8S78NeMGOOocGHMa5BVTVd/Cntpmqnfuo7qxhV21TVTuaaBybwMrt9ewbHMVsYQjGjYuPG4YHzxlDNPHDNBVqyWnIiGIkKCiwP81OxVttgKXD9ud2jLL4RsTKw+Z9utpa2A5vHnZDvY2h9jXHGJvk7GrKcSuxhA7G0P7769p6sf86gF8Abh2w0Wwof1rMYYXOyYW1XFUfjUjo1UMDNVRRh0lrpbiRC1FiRoKG2uI1m4mHG8kHG8iFG/0b02EEi0pvZwE3g61t1Pt3VoI00KEZheiyUVoTIRpIp9mF/GmE6WZCJeEd/Jw83R/mjfdW86LlzCvfRMRauN5hEIhEhgJZ8SBmAvx27yfcEPzf+Ew/wYcdN8rfYwEIZx/S7T76zAShEkQMsePo3fwlZaP7Z8fIU6UGHnEyLMWosSIEiePFvKIefPM+3theDsAmxvzKKCZYmport9CEU3kb3mFfEvtfW0VD+URCxeRiBaRiBTiosWQV4zltRYerfeLCeWVYHmFhCL5hKP5hKL53pGUcL73Q04kz/sbzj9whCUc9aZZB0dnkh65adNG+r721+FKel0ux6HX6zq0nUt03Qbnki2ZpF0CF285cIRy/+3gxy4R936cSDZ//48bzRCPEY81kWhpJhFrvTXh4i0kYs24WAsu3oyLNXvP6/8Y4uItWO22/bGbmlsIEfd+AHExQiQI+z+GhIgT9kf6KwQavjsKZ+ZtZczbEjkLAd7/TyIUJRHKIxGK4sJ5uFAeLnzgvoWjuEg+1vp/GsnHwnlYJB+L5BGKeG1C0XxCkSjhiP83mkc4kkcoku8fUc3z/9ej3lHVcJ73I0Uoeuj/d9sfjjo6mntQu8NjO5DLQmIE7O8TCt5RiVkdtXHOxcysChjoT3+l3bIjcpdqFrzyK3ji26m1zSuFonLvVjzIu2rwgHFQPg4qjoXy8YdciRrgP+59nedW7Txk+qCSfMYPKuZjZ45nxpgBzBhTTr8infd9pJm/bg+zyM0VtlN9/lS13xBkQ1EEiiIJRhQlGQ2qvX/C/x2/iqWDLqK2KebdGmP771c2lvJW9SCcc9Q2xahrjhM/5Is+uZC/Y21tdtH9r0MAYn6xEAlHKMoPU5wXoSgvTFF+hOK8MCX5EUoKIpTmR6het5CCcILCkNcnpdC/sfEVCo9+J+XhBFFzRPzTwsJJvpeuWngM95341kHTnAPehOuPLyHmjDUj5hBPOBLOu2BlIuGIO8f5U4YSSyRoiTti8QSxhKMlniCecMQTjujaJ4mEHKu21xAxBxvghIljCRn7T0kLG4TNETJHCP/7E+cXKd7jmDNY+SoAmyd+gJaEdxRqbEU/amIhqkecQW19I431NTTV19LcUENLYx3xxloSTbW45jpccz2hWD3ReANFNFFkTRTRSFGj/5cmCm0vxWylkCaKzZtWRCMRS+Ezk2Vx11qidb0z0VWbrj6Z3fEc7SWLZu2itH/c0XLJnv3QWF0/X6rPGbLsXqg3ld3F3r5L2dHOYpP/I0cLkf3btpgL75/W+uNICxFaXP4h02MuQtxC/o8p3pHJ68OP8kDLqd52wi8uQjjvqCyOMAmi/g8Qef4tSv3+HyVaf6jII0bUvMfeDxixwD9I5JYdXHC0fgrM4IwvwVk39mh2qcrZla3N7ApgtnPuo/7jDwKznHOfbdNmmd+m0n+8Bm8f42bgFefcPf703wH/cs490O45Pg583H94NLAyzXQHQdaHCch2zL6QYy5i9oUc+0rMvpBjX4nZF3LMRcy+kGNfidkXcuwrMftCjrmI2Rdy7Csx+0KOuYjZWbwxzrmKrgLk8ojEZmBUm8cj/WnJ2lSaWQToh9fpOpVlcc79BvhNpoma2YJULgPekzH7Qo65iNkXcuwrMftCjn0lZl/IMRcx+0KOfSVmX8ixr8TsCznmImZfyLGvxOwLOeYiZjbiHXr+TPa8Bkw0s3FmlofXeXpuuzZzgev8+1cATznvEMlc4GozyzezccBE4NUc5ioiIiIiIgHk7IiE3+fhs8BjeMO/3umcW25m3wEWOOfmAr8D/uh3pt6DV2zgt/srXpfMGPCZw3rEJhERERGRPian4+M55+YB89pNu6nN/Ubgyg6W/T7w/WTzciDj06O6IWZfyDEXMftCjn0lZl/Isa/E7As55iJmX8ixr8TsCzn2lZh9IcdcxOwLOfaVmH0hx1zEzLx7QK46W4uIiIiIyOErl30kRERERETkcOWcO6JueCNDPQwsBpYDH24z7zrgbf92XcC4ZwNv+DGfbTN9Nt6wtKuBr6aR78l4/USuyCRP4FpgCbAUeAk4Pls5ZjHGKOBpvL4xy4HP+dPLgcf91/s4MCBg3DDwOvBP//E4YL6f631AXsB4/fEuoPgWsAI4NQs5fsF/zcuAvwAFQfME7gR2AMvaTEuaF96A1f/Pj70EOClAzB/5r30J8Hegf5t5X/NjrgTOTzVmm3n/hTdo/KBU8+woHvAffp7LgdsyzRE4Ae/6Nm8AC4CZAXIM9NnOMGba66ejmOmun87ipbt+OnndmayfArwBPVq/F27pbFsB5PuPV/vzxwaI+Sf/tS3D+5xFU3wvk8ZrM///AbVtHmeSo+GdWrwKbxv3n1l4L88FFvnr5wVgQqp5+u1S2o6nGq+DmGmtm85iZrJ+Osgx7XXTScxM1816vH2LN/D6wELm3z3JYmb63XNIzHS3bZ3FI7PvnmSv+wTS3Lb57fqT4j5LkM/R/vhdNTjcbsDXgR/69yvwOnnn+W/qWv/vAP9+SjuD/kp6ExjtPx7c5p91DTDef47FwOQAuYaBp/D6mVzhT0srT+C0Nh+UC4D52cgxWzH8OMNaP7RAKd6GcjJwG35xAny1df0FiPtF4M8c2Gj+Fbjav/9r4FMB490FfNS/n+ev/7RzxLvY4jqgsE1+1wfNEzgTOImDd36T5gVcCPzL32ic0vp5SDHmu4GIf/+HbWJO9td9Pt6X/BognEpMf/oovMEZNnBgY95lnh3keA7wBJDf7n8y7RyBfwMXtMnrmQA5BvpsZxgz7fXTUcx0108nOaa9fjqJmcn6MaDEvx/F22k6hQ7+B4FPA7/2718N3Bcg5oW0XjTc+9HgUym+l0nj+Y9nAH/k4B3VTHL8MHA3EGq3fjJ5L1cBx7bJ7Q+p5unPS2k7nmq8DmKmtW46i5nJ+ukgx7TXTScxM1036/G3CW2mZfrdkyxmpt89h8RMd9vWSY6Zfvcki5n2ts1vl/I+S5DPUevtSDy1yQGlZmZACV4hEQPOBx53zu1xzu3Fq9BmpxjzGuBB59xGAOfcDn/6TGC1c26tc64ZuBeYEyDX/wD+hvfLaKu08nTOveS3B6+yHZmlHLMVA+fcVufcIv9+DV7lPMKPdZff7C7gslRjmtlI4CLg//zHBrwTrzpPJ14/vJ3M3/l5Njvn9mWSoy8CFPrXUykCtgbN0zn3HN7nua2O8poD3O08rwD9zWxYKjGdc/92zsX8h20/S3OAe51zTc65dXi/aMxMMU+AnwJf5uDL2HaZZwfxPgXc6pxr8tu0/g9lkqMDyvz7/YAtAXIM+tlOO2Ym66eTPCGN9dNJvLTXTycxM1k/zjlX6z+M+jdHx/+DbdfbA8C5/raly5jOuXn+PIf3y33b9dPZe5k0npmF8X6p/TIHSztHvPXzHee8ywq3Wz/pvpedrZ9O8wy4He8yXrKYfu5prZvOYmayfpLFI4N100nMtNdNJzL67kkm0++eTqT13dOBjL57OpD2ti2NfZbAr/tILCR+ARyLtyKW4h0WT+B9EW1q066SA1+gXZkEDDCzZ8xsoZl9yJ+edkwzGwG8B/hVu1mZ5NnqBryKM1vxshHjIGY2FjgR79esIc65rf6sbcCQAKH+F28DkfAfDwT2tdkYBc11HLAT+L2ZvW5m/2dmxZnk6JzbDPwY2IhXQFQBCzPMs1VHeWVrnX2ELHyWzGwOsNk5t7jdrHRjTgLOMLP5ZvasmZ2caY7A54EfmdkmvPX1tXRipvjZziRmW2mvn7Yxs7F+2uWYlfXTLubnyWD9mFnYzN7A++HmcbxfDDv6H9wf059fhbdt6TSmc25+m3lR4IPAo6nm2UG8zwJz23yOWmWS41HAVWa2wMz+ZWYTU82xk5gfBeaZWaX/um8NkOf/kvp2PKXXnSRm2/wDr5tOYmayfpLFy2jddBAzk3UD3o7uv/39n4/70zLdtiWL2VY627ZDYma4bUuWY6bbtmQxP0/627ag+yyBvyOPxELifLzzzIbjnXf2CzMr62yBFESA6XhV/vnAt8xsUoYx/xf4SuuvDtliZufgFRJfyWbcbDKzErwjMZ93zlW3nef/UuSSLnhonIuBHc65hVlML4J3ysuvnHMnAnV4hwXTytHPcwDerwDj8D6XxaR+NCxlQfPqipl9A+9o3p8yjFOEd8rhTV21DSCCd/rfKcCNwF8D/JLWkU8BX3DOjcLr0/K7oAGy9dlOJWYm66dtTD9GRusnSY4Zr58kMTNaP865uHPuBLxfOWcCxwRZPpWYZja1zexfAs85557PIN6ZeEOo/zzLOeYDjc674u1v8foLZBrzC8CFzrmRwO+Bn6QSKxfb8RRiBl43yWKa2XDSXD+d5Jj2uukkZlrrpo3TnXMn4Z02/Rn/c7lfmtu2DmNmsG1LFjOTbVuyeJlu25LFzGTblvV9lvaOiELCzD5jZm/4v5B8Bu80JOecW413bvoxwGa88+RajfSnpRJzC/CYc67OObcLeA44PsOYM4B7zWw93lW/f2lmlwWJ2TaemQ03s2l4hzPnOOd2+80C5diBbMRozTmKt3PwJ+fcg/7k7a2H1vy/Ozpavp13AJf67+G9eIfCf4Z3qK71GipBc60EKtv8svgA3j9pujkCvAtY55zb6ZxrAR70c88kz1Yd5ZXROjOz64GLgWv9jVAmMY/CK6IW++tqJLDIzIZmELOSA//nr+L9+jYog3jgDXLQ+pm8nwOHpVOKGfCznUnMjNZPkpgZrZ8Ocsxo/XQQM6P108o/7P80XofEjv4H98f05/cDdtOBNjFn+8t8G6+P3hfbNEs5zzbxzgEmAKv9dVNk3gVeM82xkgPv5d+BaUFzbBfzArwBPlq3m/fh9dtLJc+g2/FUXvchMc3sHn+ZdNdNsjyXk/766SjHTNZNspiPkP66AfYfVW89jefveP97GW3bOoiZ0bYtScyzyGDb1kGOGW3bOoiZybYt6D5L8O9I10UnisPthneq0M3+/SH+GzQIr4Jch9eBeYB/vzzFmMcCT+JVfkV4Iz5M9R+vxfugtnZCnpJGzn/g4M7WgfMERuOdk3dau+kZ55jF12l4ncj+t930H3Fwp6Db0oh9Ngc6lt3PwZ30Ph0w1vPA0f79m/380s4RmIX3hVPkvwd34fWPCZwnMJZDR1g6JC+8o2dtO1S9GiDmbLzBBSratZvCwZ3J1pKkM1mymO3mredAh7eU8kyS4yfxziMG71DzJj9G2jninYt/tn//XGBhqjkG/WxnGDPt9dNRzHTXTyc5pr1+OomZyfqpwB8BBijE+x+/mA7+B/F+kGrbCfWvAWJ+FG/kvMJ27bt6L5PGa9embWfeTHK8FfiIP/1s4LUsvJe7gEn+9BuAv6WaZ5vYZ9PFdjxIvCQx01o3ncXMZP10kGPa6yZZTLzv77TXDd4R9NI291/C2wZlsm3rKGYm27akMdu1WU/q27aOcsxk29ZRzLS3bX67lPdZgn6OnHNHZCExHK8H/FK8Hf4PtJn3Ebyd7dW0GRY2xbg3+h/wZXiH2lunX4g3IsIa4Btp5vwHDh7+NXCeeEci9uKd1vUGBw9Vlo0csxHjdLzDa0va5Hkh3jmZT+INU/YEKRZ47WKfzYEN8Xi8jnSr8b6M8gPGOgFvCLYlwEN4BV1GOQK34A3NtgxvdI/8oHnijTKyFWjB+xXiho7y8jcSt/vraykwI0DM1Xgbx9Z19Os27b/hx1yJP8pEKjHbzV/PwUPwdZpnBznmAff47+ci4J2Z5uh/PhfifRnMB6YHyDHQZzvDmGmvn45iprt+Oskx7fXTScxM1s80vOEwl/g53dTZtgJviNP7/emvAuMDxIz5ubTmflOK72XSeO3atN1RzSTH/sAjfh4v4w8XnuF7+R5/mcXAM635pJJnkO14kHhJYqa1bjqLmcn66SDHtNdNJzHTXjf+eljMgeF+v+FPz2Tb1lHMTLZtSWNmsG3rKMdMtm0dxUx72+a3O4EU91mCfo6cc7qytYiIiIiIBHdE9JEQEREREZHsUiEhIiIiIiKBqZAQEREREZHAVEiIiIiIiEhgKiRERERERCSwSNdNREREumZmcbwhA1td5pxb30PpiIhIjmn4VxERyQozq3XOlQRcxvC+ixI5SktERHJEpzaJiEhOmFmJmT1pZovMbKmZzfGnjzWzlWZ2N96Fm0aZ2Y1m9pqZLTGzW3o2cxERSYVObRIRkWwpNLM3/PvrgCuB9zjnqs1sEPCKmc31508ErnPOvWJm7/Yfz8S7supcMzvTOfdcN+cvIiIBqJAQEZFsaXDOndD6wMyiwA/M7EwgAYwAhvizNzjnXvHvv9u/ve4/LsErLFRIiIj0YiokREQkV64FKoDpzrkWM1sPFPjz6tq0M+C/nXN3dHN+IiKSAfWREBGRXOkH7PCLiHOAMR20ewz4iJmVAJjZCDMb3F1JiohIenREQkREcuVPwMNmthRYALyVrJFz7t9mdizwsjeIE7XAB4Ad3ZWoiIgEp+FfRUREREQkMJ3aJCIiIiIigamQEBERERGRwFRIiIiIiIhIYCokREREREQkMBUSIiIiIiISmAoJEREREREJTIWEiIiIiIgEpkJCREREREQC+//Y3ECli21uVQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 936x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pdf = data_shards.select(['Pclass', 'Fare', 'Survived']).sample_to_pdf(frac=1.0)\n",
    "from matplotlib.ticker import MultipleLocator, FormatStrFormatter\n",
    "xmajorLocator   = MultipleLocator(20)  # set the major locator to multiples of 5\n",
    "xmajorFormatter = FormatStrFormatter('%1.0f')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(13, 5))\n",
    "sns.distplot(pdf['Fare'], kde = True, rug = True)\n",
    "sns.distplot(pdf.loc[pdf['Survived']==1, 'Fare'], kde = True, rug = True)\n",
    "ax.xaxis.set_major_locator(xmajorLocator)  \n",
    "ax.xaxis.set_major_formatter(xmajorFormatter) \n",
    "plt.show()\n",
    "\n",
    "ax = sns.boxplot(x=\"Pclass\", y=\"Fare\", hue=\"Survived\", data=pdf);\n",
    "ax.set_yscale('log')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py37tf2_x",
   "language": "python",
   "name": "py37tf2_x"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
